package cn.com.huzo.service.purchase;

import cn.com.huzo.model.entities.purchase.PoHeaderEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 采购合同管理服务对象接口。
 *
 * @author 吴旭
 */
public interface PoHeaderManager extends GenericManager<PoHeaderEntity, Long> {

    /**
     * 根据给定的条件（headerId+页面信息）信息，得到主表和3个明细表信息
     *
     * @param criterion 采购订单标识、当前用户、采购订单审核工作流标识等
     * @return 主表和3个明细表信息
     * @throws java.lang.Exception
     */
    Map<String, Object> fetchByHeaderKey(Map<String, Object> criterion) throws Exception;

    /**
     * 的到当前订单打印预览数据
     *
     * @param criterion
     * @return 打印预览数据
     * @throws Exception
     */
    Map<String, Object> fetchPrintPreviewData(Map<String, Object> criterion) throws Exception;

    /**
     * 的到当前订单明细打印数据
     *
     * @param criterion
     * @return 明细打印数据
     * @throws Exception
     */
    Map<String, Object> fetchExportMemoData(Map<String, Object> criterion) throws Exception;

    /**
     * 得到新的单据号（根据规则自动生成）
     * <p>
     * @return @throws java.lang.Exception
     */
    String fetchNewBillNo() throws Exception;

    /**
     * 根据输入的订单号从采购订单中自动补全剩余的订单号
     *
     * @param keyWord 输入的订单号(部分订单号)
     * @return
     * @throws java.lang.Exception
     */
    List<String> fetchPoNoForAutoComplate(String keyWord) throws Exception;

    /**
     * 审核
     *
     * @param headerId 要审核的订单标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param isCheckCurrentNode 是否针对当前流程做审核
     * @param pageIndex 订单明细当前页
     * @param limit 订单明细每页显示数
     *
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy, Short isCheckCurrentNode,
            Integer pageIndex, Integer limit) throws Exception;

    /**
     * 反审
     *
     * @param headerId 要反审的订单标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param pageIndex 订单明细当前页
     * @param limit 订单明细每页显示数
     *
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doUnCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy,
            Integer pageIndex, Integer limit) throws Exception;

    /**
     * 批量审核处理
     *
     * @param criterion 要审核的订单
     * @return 审核后的当前页订单数据
     * @throws Exception
     */
    Map<String, Object> batchCheck(Map<String, Object> criterion) throws Exception;

    /**
     * 更新打印次数
     *
     * @param poId
     * @return
     * @throws java.lang.Exception
     */
    Integer updatePrintFlag(Long poId) throws Exception;
}
